/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Klassen;

import Enums.RowType;
import java.io.IOException;
import java.util.ArrayList;

/**
 *
 * @author Serenity
 */
public class Row extends FieldContainer {
    
    private RowType rowType;
    private boolean isChangedByConclusion;
    
    public Row(Board board, int position, RowType rowType){
        super(board, position);
        this.rowType = rowType;
        Object fields = new Field[9]; //wozu?
    }
    
    public boolean removePosVal(int posVal, int boxID, boolean isManual, boolean isBenchmark) throws IOException {
        this.isChangedByConclusion = false;
        //Die Boxen des Spielfeldes sind von rechts oben nach links unten unten aufsteigend nummeriert
        
        //Handelt es sich bei der Row um eine horrizontale oder vertikale Row?
        
        if(this.rowType == RowType.horizontal){
            //System.out.println("(horizontal)");
            //in Horizontale Row's gehöen die Felder 0-2 zu den Boxen 0-2, die Felder 3-5 zu den Boxen 3-5 und die Felder 6-8 zu den Boxen 6-8
            
            int lowerBorder = boxID-(boxID%3);
            int upperBorder = lowerBorder + 3;
            
            for(int fieldIndex = 0; fieldIndex < 9; fieldIndex++){
                
                //Die zu der Box gehörenden Felder müssen übersprungen werden
                
                if(!(fieldIndex >= lowerBorder && fieldIndex < upperBorder)){
                    if(this.fields[fieldIndex].getPossible_values().contains((Integer)posVal)){
                        //this.fields[fieldIndex].getPossible_values().remove((Integer)posVal);
                        //this.fields[fieldIndex].addToConclusionList((Integer)posVal);
                        this.fields[fieldIndex].newSpecialRemovedValues((Integer)posVal);
                        
                        this.isChangedByConclusion = true;
                        //break;
                    }else{
                        this.isChangedByConclusion = this.isChangedByConclusion || false;
                    }
                }
            }
            
        }else{
            //System.out.println("(vertical)");
            //in vertikalen Row's gehören die Felder 0-2 zu den Boxen 0,3,6, die Felder 3-5 zu den Boxen 1,4,7 und die Felder 6-8 zu den Boxen 2,5,8
            
            int lowerBorder = 3*(boxID%3);
            int upperBorder = lowerBorder + 3;
            
            for(int fieldIndex = 0; fieldIndex < 9; fieldIndex++){
                
                //Die zu der Box gehörenden Felder müssen übersprungen werden
                
                if(!(fieldIndex >= lowerBorder && fieldIndex < upperBorder)){
                    if(this.fields[fieldIndex].getPossible_values().contains((Integer)posVal)){
                        //this.fields[fieldIndex].getPossible_values().remove((Integer)posVal);
                        //this.fields[fieldIndex].addToConclusionList((Integer)posVal);
                        this.fields[fieldIndex].newSpecialRemovedValues((Integer)posVal);
                        
                        this.isChangedByConclusion = true;
                        //break;
                    }else{
                        this.isChangedByConclusion = this.isChangedByConclusion || false;
                    }
                }
            }
        }
        
        if(this.isChangedByConclusion){
            
            if(!isBenchmark){
                System.out.println("Concluded "+posVal+" in box "+boxID+" to have an impact on row "+this.position+" ("+this.rowType.toString()+")");
            }
            
            if(isManual){
                System.in.read();
            }
        }
        
        return (this.isChangedByConclusion);
    }
}
